//multer 处理上传模块 
//sqlite3 数据库 
//uuid 生成id

// 加载 epress 依赖库
const express = require("express")
// 上传模块
const multer = require("multer")



// 添加静态路径模块
const path = require("path")
const app = express();

const { db,genid } = require("./db/DbUtils")

// 定义端口
const port = 8080

//#region 中间件定义

// 跨域请求
app.use(function (req,res,next) {
    // 设置允许跨域的域名，*代表任意域名跨域
    res.header("Access-Control-Allow-Origin","*");
    // 允许的 hader 类型
    res.header("Access-Control-Allow-Headers","*");
    // 跨域允许的请求方式.
    // 之前就是这里写错了，所以服务端的put,post delete 接口都失效
    res.header("Access-Control-Allow-Methods", "DELETE,PUT,POST,GET,OPTIONS");
    // 让 options 尝试请求快速结束
    if(req.method == "OPTIONS") res.sendStatus(200); //让options尝试请求快速结束
    else next();
 });

// app 注册 json 模块 
app.use(express.json())
// 上传模块，并设施上传文件临时目录
const update = multer({
    dest:"./public/upload/temp"
})
// app 注册上传模块
app.use(update.any())
// 注册并指定静态路径，
app.use(express.static(path.join(__dirname, "public")))

// app.use(cors({
//     origin:`http://localhost:${port}/`,
//     method: 'PUT'
// }))

// 定义中间件地址参数
const ADMIN_TOKEN_PATH = "/_token"
 
// 中间件开发
app.all("*", async (req,res,next)=>{
    
    // 如果 app再地址栏中找到  /_token 字符，则进行如下判断
    if(req.path.indexOf(ADMIN_TOKEN_PATH) > -1){

        let { token } = req.headers;

        let admin_token_sql = "SELECT * FROM `admin` WHERE `token` = ?"
        let adminResult = await db.async.all(admin_token_sql,[token])
        if(adminResult.err != null || adminResult.rows.length == 0){
            res.send({
                code: 403,
                msg:"请先登录"
            })
            return
        }else{
            next()
        }
    }else{
        next()
    }

})




// app 注册默认访问接口
app.use("/test",require("./routers/TestRouter"))
// 注册登录接口
app.use("/admin",require("./routers/AdminRouter"))
// 注册博客分类接口
app.use("/category",require("./routers/CategoryRouter"))
// 注册博客接口
app.use("/blog",require("./routers/BlogRouter"))
// 注册上传接口
app.use("/upload",require("./routers/UploadRouter"))

//#endregion

app.get("/",(req,res)=>{
    res.send("hello world");
})

app.listen(port,()=>{
    console.log(`启动成功 : http://localhost:${port}/`)
})